
#include "type.h"
#include "const.h"
#include "protectmode.h"
#include "global.h"




/*======================================================================*
                               itoa
 *======================================================================*/
PUBLIC char * itoa(char * str, int num)
{
	char *	p = str;
	char	ch;
	int	i;
	boolean	flag = FALSE;

	*p++ = '0';
	*p++ = 'x';

	if(num == 0){
		*p++ = '0';
	}
	else{	
		for(i=28;i>=0;i-=4){
			ch = (num >> i) & 0xF;
			if(flag || (ch > 0)){
				flag = TRUE;
				ch += '0';
				if(ch > '9'){
					ch += 7;
				}
				*p++ = ch;
			}
		}
	}

	*p = 0;

	return str;
}

PUBLIC char * itoa_decimal(char * str, int num)
{
	char *	p = str;
	int	i;
	int t;
	int j,k;
	char tc;
	i = 0;
	t = num % 10;
	num = num / 10;
	p[i] = t + '0';
	i++;
	while(num != 0)
	{
		t = num % 10;
		num = num / 10;
		p[i] = t + '0';
		i++;
	}
	p[i] = '\0';
	if(i == 1)
		return str;
	i--;
	j = i / 2;
	k = 0;
	while(i > j)
	{
		tc = p[i];
		p[i] = p[k];
		p[k] = tc;
		i--;
		k++;
	}
	return str;
}
/*======================================================================*
                               disp_int
 *======================================================================*/
PUBLIC void disp_int(int input)
{
	char output[16];
	itoa(output, input);
	disp_str(output);
}
PUBLIC void disp_color_int(int input,int color)
{
	char output[16];
	itoa(output, input);
	disp_color_str(output, color);
}
/*	disp_int in decimal		*/

PUBLIC void disp_int_dec(int input)
{
	char output[16];
	itoa_decimal(output,input);
	disp_str(output);
}

PUBLIC void delay(int time)
{
	int i, j, k;
	for(k=0;k<time;k++){
		/*for(i=0;i<10000;i++){	for Virtual PC	*/
		for(i=0;i<13;i++){/*	for Bochs	*/
			for(j=0;j<10000;j++){}
		}
	}
}
/*======================================================================*
                               reset_cursor
 *======================================================================*/
 PUBLIC void reset_cursor(){
 	//int_cli();
 	out_byte(0x3d4,0xe);
 	out_byte(0x3d5,((disp_pos/2)>>8)&0xff);
 	out_byte(0x3d4,0xf);
 	out_byte(0x3d5,(disp_pos/2)&0xff);
 	//int_sti();
 }
